{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6c7cf355",
   "metadata": {},
   "source": [
    "## 最小二乘法\n",
    "\n",
    "### 1. 基本原理\n",
    "\n",
    "最小二乘是一种通过**最小化误差的平方和**找到一组数据的最佳函数匹配的优化技术，用于曲线拟合、模型求解问题，他的一般表示形式可以写作\n",
    "$$\n",
    "L = \\sum (V_{obv} - V_{target}(\\theta))^2\n",
    "$$\n",
    "其中$V_{obv}$是我们观测的多组样本值，$V_{target}$是我们假设拟合函数的输出值，$\\theta$为构造模型的参数。$L$是目标函数，如果通过调整模型参数$\\theta$，使得$L$下降到最小则表明，拟合函数与观测最为接近，也就是找到了最优的模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16e06574",
   "metadata": {},
   "source": [
    "详细的数学解释如下：\n",
    "\n",
    "如果我们有$N$个观测数据,$X$是自变量，$Y$是因变量：\n",
    "\n",
    "$$\n",
    "\\mathbf{X} = \\{x_1, x_2, ..., x_N \\} \\\\\n",
    "\\mathbf{Y} = \\{y_1, y_2, ..., y_N \\}\n",
    "$$\n",
    "\n",
    "我们希望有一个模型可以拟合这些数据，假如我们使用最简单的线性模型 $y=ax+b$\n",
    "\n",
    "那么问题的实质就是求解能够使得模型输出和观测数据误差最小的$a$和$b$\n",
    "\n",
    "这时我们就需要定义一个损失函数（Loss function）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d435a5c2",
   "metadata": {},
   "source": [
    "$$\n",
    "L = \\sum_{i=1}^{N} (y_i - a x_i - b)^2 \\\\\n",
    "L = \\sum_{i=1}^{N} \\{y_i - (a x_i + b)\\}^2\n",
    "$$\n",
    "\n",
    "使用的是模型输出值和观测数据值的距离平方和，求偏导即可获取最小值\n",
    "$$\n",
    "\\frac{\\partial L}{\\partial a} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b) x_i = 0 \\\\\n",
    "\\frac{\\partial L}{\\partial b} = -2 \\sum_{i=1}^{N} (y_i - a x_i - b) = 0\n",
    "$$\n",
    "\n",
    "所以有：\n",
    "$$\n",
    "a \\sum x_i^2 + b \\sum x_i = \\sum y_i x_i \\\\\n",
    "a \\sum x_i + b N = \\sum y_i\n",
    "$$\n",
    "\n",
    "通过求解二元一次方程组，我们即可求出模型的最优参数。\n",
    "\n",
    "同样在使用其他形式的模型进行拟合的时候我们也可以用类似的推导得出方程组求解模型参数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bd52a4d",
   "metadata": {},
   "source": [
    "### 2.程序示例\n",
    "\n",
    "这种方法不需要迭代，我们找出了最佳参数和所有样本点之间的关系，那么我们直接计算就可以得到结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b816b0da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a = 949.435260, b = 152.133484\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import sklearn\n",
    "from sklearn import datasets\n",
    "\n",
    "# load data from sklearn\n",
    "d = datasets.load_diabetes()\n",
    "\n",
    "X = d.data[:, 2]\n",
    "Y = d.target\n",
    "\n",
    "# draw original data\n",
    "plt.scatter(X, Y)\n",
    "plt.xlabel(\"X\")\n",
    "plt.ylabel(\"Y\")\n",
    "plt.title(\"the original data\")\n",
    "plt.show()\n",
    "\n",
    "#calculate the best parameters\n",
    "N = X.shape[0]\n",
    "\n",
    "S_X2 = np.sum(X*X)\n",
    "S_X  = np.sum(X)\n",
    "S_XY = np.sum(X*Y)\n",
    "S_Y  = np.sum(Y)\n",
    "\n",
    "A1 = np.array([[S_X2, S_X], \n",
    "               [S_X, N]])\n",
    "B1 = np.array([S_XY, S_Y])\n",
    "#2*1的ab参数矩阵就等于 inv（A1）·B\n",
    "coeff = np.linalg.inv(A1).dot(B1)\n",
    "\n",
    "print('a = %f, b = %f' % (coeff[0], coeff[1]))\n",
    "\n",
    "x_min = np.min(X)\n",
    "x_max = np.max(X)\n",
    "y_min = coeff[0] * x_min + coeff[1]\n",
    "y_max = coeff[0] * x_max + coeff[1]\n",
    "\n",
    "plt.scatter(X, Y, label='original data')\n",
    "plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')\n",
    "plt.legend()\n",
    "plt.title(\"least squares outcome\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
